﻿//using System;
//using System.Net;
//using System.Net.Http;
//using System.Web.Http;
//using System.Web.Http.Filters;

//namespace NCS.IConnect.Core.WebApi
//{
//    /// <summary>
//    /// </summary>
//    internal sealed class ErrorInfoExceptionFilterAttribute : ExceptionFilterAttribute
//    {
//        /// <summary>
//        ///     Raises the exception event.
//        /// </summary>
//        /// <param name="actionExecutedContext">The context for the action.</param>
//        public override void OnException(HttpActionExecutedContext actionExecutedContext)
//        {
//            var ex = actionExecutedContext.Exception;
//            var negotiator =
//                actionExecutedContext.ActionContext.ControllerContext.Configuration.Services.GetContentNegotiator();
//            var negotiationResult = negotiator.Negotiate(typeof (ErrorInfo), actionExecutedContext.Request,
//                actionExecutedContext.ActionContext.ControllerContext.Configuration.Formatters);
//            var action = new Action<ErrorInfo>(errorInfo =>
//            {
//                actionExecutedContext.Response =
//                    new HttpResponseMessage(HttpStatusCode.InternalServerError)
//                    {
//                        Content =
//                            new ObjectContent<ErrorInfo>(errorInfo, negotiationResult.Formatter,
//                                negotiationResult.MediaType)
//                    };
//            });
//            if (ex.InnerException != null && ex.InnerException is CodedException)
//            {
//                var innerException = ((CodedException) ex.InnerException);
//                if (innerException.ErrorCode == Errors.E0601.ErrorCode)
//                {
//                    var errorInfo = new ErrorInfo(Errors.E0601) {Message = ex.InnerException.Message};
//                    action(errorInfo);
//                    return;
//                }
//                if (innerException.ErrorCode == Errors.E0602.ErrorCode)
//                {
//                    var errorInfo = new ErrorInfo(Errors.E0602) {Message = ex.InnerException.Message};
//                    action(errorInfo);
//                    return;
//                }
//                if (innerException.ErrorCode == Errors.E0603.ErrorCode)
//                {
//                    var errorInfo = new ErrorInfo(Errors.E0603) {Message = ex.InnerException.Message};
//                    action(errorInfo);
//                    return;
//                }
//                if (innerException.ErrorCode == Errors.E0604.ErrorCode)
//                {
//                    var errorInfo = new ErrorInfo(Errors.E0604) {Message = ex.InnerException.Message};
//                    action(errorInfo);
//                    return;
//                }
//                if (innerException.ErrorCode == Errors.E0701.ErrorCode)
//                {
//                    var errorInfo = new ErrorInfo(Errors.E0701) {Message = ex.InnerException.Message};
//                    action(errorInfo);
//                    return;
//                }
//                if (innerException.ErrorCode == Errors.E0801.ErrorCode)
//                {
//                    var errorInfo = new ErrorInfo(Errors.E0801) {Message = ex.InnerException.Message};
//                    action(errorInfo);
//                }
//            }
//        }
//    }
//}